Phase 20: MCP Server — FLUX als Tool für LLMs - #33
Conversation
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Implementiert einen MCP-Server (flux-mcp binary) der die FLUX-Pipeline über stdio als JSON-RPC 2.0 Tools exponiert. Extrahiert pipeline.rs als shared module für CLI und MCP. 6 Tools: flux_check, flux_compile, flux_build, flux_ir, flux_evolve, flux_prove 11 MCP-Tests, alle bestehenden 271 Tests bestehen weiterhin. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Extends the MCP test suite with 3 additional integration tests: - mcp_invalid_json: verifies -32700 parse error response - mcp_notification_no_response: verifies notifications are silent - mcp_flux_evolve_valid: validates evolution tool with seed Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! Dieser Pull Request führt einen Model Context Protocol (MCP)-Server für FLUX FTL ein, der die Interaktion mit der Compiler-Pipeline über JSON-RPC 2.0 ermöglicht. Ziel ist es, die Integration der FLUX FTL-Tools in größere Systeme, insbesondere in Large Language Models (LLMs), zu vereinfachen. Durch die Bereitstellung einer standardisierten Schnittstelle können externe Anwendungen die Kernfunktionen des Compilers programmatisch nutzen, was die Automatisierung und Entwicklung von AI-gesteuerten Workflows erheblich verbessert. Die Auslagerung der Pipeline-Logik in ein separates Modul fördert zudem die Code-Wiederverwendbarkeit und Wartbarkeit. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
Dieser Pull Request führt einen MCP-Server für FLUX ein, der die Compiler-Pipeline als Tools für LLMs über JSON-RPC bereitstellt. Die Implementierung ist gut strukturiert, insbesondere durch die Extraktion der gemeinsamen Logik in ein pipeline.rs-Modul, was die Wiederverwendung von Code zwischen der CLI und dem neuen MCP-Server ermöglicht. Die hinzugefügten Integrationstests decken die Kernfunktionalität und Fehlerfälle gut ab.
Ich habe einige Verbesserungsvorschläge zur Fehlerbehandlung im MCP-Server gemacht, um die Robustheit und die API-Konsistenz zu erhöhen. Insbesondere schlage ich vor, I/O-Fehler beim Senden von Antworten zu behandeln und die Serialisierungsfehler konsistenter zu melden, um die Client-Implementierung zu vereinfachen.
| let _ = writeln!(out, "{}", json); | ||
| let _ = out.flush(); |
There was a problem hiding this comment.
Die Ergebnisse von writeln! und flush werden hier ignoriert. Wenn das Schreiben nach stdout fehlschlägt, wird der Client keine Antwort erhalten und wahrscheinlich hängen bleiben. Da die Kommunikation über stdio für diesen Server kritisch ist, sollten diese Fehler behandelt werden. Ein panic wäre in diesem Fall angemessen, da der Server in einem inkonsistenten Zustand wäre, wenn er nicht mit dem Client kommunizieren kann.
| let _ = writeln!(out, "{}", json); | |
| let _ = out.flush(); | |
| writeln!(out, "{}").expect("failed to write to stdout"); | |
| out.flush().expect("failed to flush stdout"); |
| let json = serde_json::to_string(&metadata) | ||
| .unwrap_or_else(|e| format!("{{\"error\": \"{}\"}}", e)); | ||
| send_tool_result(stdout, id, &json); |
There was a problem hiding this comment.
Wenn die Serialisierung von metadata fehlschlägt, wird eine JSON-Fehlermeldung als erfolgreiches tool_result gesendet. Dies zwingt den Client, den Textinhalt zu parsen, um nach Fehlern zu suchen. Es ist besser, im Fehlerfall send_tool_error zu verwenden, um einen korrekten tool_result mit "isError": true zu senden. Dies verbessert die API-Konsistenz und vereinfacht die Fehlerbehandlung auf Client-Seite.
match serde_json::to_string(&metadata) {
Ok(json) => send_tool_result(stdout, id, &json),
Err(e) => send_tool_error(stdout, id, &format!("Serialization error: {}", e)),
}| let json = serde_json::to_string(&proof_results) | ||
| .unwrap_or_else(|e| format!("{{\"error\": \"{}\"}}", e)); | ||
|
|
||
| send_tool_result(stdout, id, &json); |
There was a problem hiding this comment.
Wenn die Serialisierung von proof_results fehlschlägt, wird eine JSON-Fehlermeldung als erfolgreiches tool_result gesendet. Dies ist inkonsistent mit der Fehlerbehandlung an anderen Stellen und erschwert die Fehlerbehandlung für den Client. Verwenden Sie stattdessen send_tool_error, um einen korrekten tool_result mit "isError": true zu senden.
match serde_json::to_string(&proof_results) {
Ok(json) => send_tool_result(stdout, id, &json),
Err(e) => send_tool_error(stdout, id, &format!("Serialization error: {}", e)),
}
Summary
flux-mcpbinary) via JSON-RPC 2.0 über stdioflux_check,flux_compile,flux_build,flux_ir,flux_evolve,flux_provepipeline.rsModul (aus main.rs extrahiert) für CLI und MCPArchitektur
src/bin/flux-mcp.rs— Standalone MCP-Server ohne externe MCP-Cratessrc/pipeline.rs— Gemeinsame Pipeline-Logik (run_check, run_check_with_bmc)src/main.rs— Vereinfacht, nutzt pipeline.rs statt eigener ImplementierungTest plan
cargo build --bin flux-mcpkompiliertcargo clippy --all-targets -- -D warningsfehlerfreiCloses #32
🤖 Generated with Claude Code